home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / dtk_demo.zip / CALCONV.C < prev    next >
C/C++ Source or Header  |  1991-09-12  |  3KB  |  90 lines

  1. /*  CALCONV.C
  2.  * last mod.: 10-AUG-91
  3.  */
  4.  
  5. #include <STDIO.H>
  6. #include <STDLIB.H>
  7.  
  8. #include <L_DATE.H>
  9. #include <L_STR.H>
  10.  
  11. Uchar *usage =
  12. "\nThis program provides three calendrical conversions:\n"
  13. "1.  For date to day-of-week and Julian day number "
  14.     "use CALCONV month day year.\n"
  15. "2.  For Julian day number to date and day-of-week use CALCONV jdn.\n"
  16. "3.  For days between dates use CALCONV m1 d1 y1 m2 d2 y2.\n"
  17. "The number of parameters (3, 1 or 6) determines the conversion performed.\n"
  18. "All dates are in the Gregorian calendar "
  19.     "(or in the proleptic Gregorian calendar\n"
  20. "if prior to October 15, 1592 (Gregorian)).\n";
  21.  
  22. Uchar date_str[64], scratch[32];
  23.  
  24. /*-----------------------------*/
  25. void main(int argc, char *argv[])
  26. {
  27. int dow;
  28. long jdn, n;
  29. Date date, date1, date2;
  30. Date_format df;
  31.  
  32. set_date_format_default(&df);
  33.  
  34. if ( argc != 2 && argc != 4 && argc != 7 )
  35.     {
  36.     printf(usage);
  37.     exit(0);
  38.     }
  39.  
  40. switch ( argc )
  41.     {
  42.     case 2:     /*  Julian day number to date and day-of-week  */
  43.         n = atol(argv[1]);
  44.         jdn_to_date(n,&date);
  45.         df.full_day_name = TRUE;
  46.         date_to_str(&date,&df,date_str);
  47.         sltoa_commas(n,scratch);
  48.         printf("Julian day number %s is %s (Gregorian).\n",
  49.             scratch,date_str);
  50.         break;
  51.     case 4:     /*  Date to day-of-week and Julian day number  */
  52.         date.month = atoi(argv[1]);
  53.         date.day = atoi(argv[2]);
  54.         date.year = atol(argv[3]);
  55.         dow = day_of_week(&date);
  56.         if ( dow == -1 )
  57.             printf("Date invalid.\n");
  58.         else
  59.             {
  60.             df.full_day_name = FALSE;
  61.             df.short_day_name = FALSE;
  62.             date_to_str(&date,&df,date_str);
  63.             printf("Day-of-week for %s is %s.\n",
  64.                 date_str,day_name(dow));
  65.             jdn = date_to_jdn(&date);
  66.             if ( jdn == _INVALID )
  67.                 printf("Date invalid.\n");
  68.             else
  69.                 {
  70.                 sltoa_commas(jdn,scratch);
  71.                 printf("Julian day number is %s.\n",scratch);
  72.                 }
  73.             }
  74.         break;
  75.     case 7:     /*  days between dates  */
  76.         date1.month = atoi(argv[1]);
  77.         date1.day = atoi(argv[2]);
  78.         date1.year = atol(argv[3]);
  79.         date2.month = atoi(argv[4]);
  80.         date2.day = atoi(argv[5]);
  81.         date2.year = atol(argv[6]);
  82.         n = days_in_date_range(&date1,&date2);
  83.         if ( n == -1L )
  84.             printf("One or both dates invalid.\n");
  85.         else
  86.             printf("Days between (and including) dates = %ld.\n",n);
  87.         break;
  88.     }
  89. }
  90.